The present invention relates to computer methods, systems and computer program products that provide autonomous management of community size and associated presence information for heavily loaded presence servers.
Presence servers are enterprise applications that collect, manage and distribute real-time or near real-time presence information for a community of users. Conventional presence servers are typically deployed as part of a presence system and may be implemented across multiple servers through both vertical and horizontal scaling. In general terms, each user of the presence system supports a “subscription list” that identifies other users within the community whose presence information is to be monitored by that user. The presence server provides publication and/or notification of presence information so that each user receives notifications of presence and availability changes for the users that are identified on their subscription list.
The overall performance of the presence system is affected by how well the presence server optimizes the management of presence information in real time. The optimization of presence data becomes increasingly important as the presence system scales up to include more users within the presence system community and/or to handle larger subscription bases/quantity of presence information traffic for its existing members. For example, in an instant messaging community, the presence server maintains presence information comprising an awareness status for the members of the instant message community. A change in the availability of a member of the instant message community is reflected in a corresponding change in that member's awareness status on the presence server, which triggers the presence server to update the availability status of that member to all associated subscribing members. Accordingly, the change in status of a single member may require numerous messages to be generated, depending upon how many members subscribe to the member whose status has changed.
The subscription list maintained by each member may identify an arbitrary number of other members. In general terms, a community of N users may each subscribe to as many as Y other members, implying that the presence server needs to be able to keep N*Y subscriptions up to date in real time. To update subscription information in real time, the presence server receives periodic updates from each member, such as available, unavailable, on-line but do not disturb, etc. The presence server propagates the received status changes to members that need to be made aware of such changes. In the conventional art, this happens in near real-time, e.g., at a regular frequency of less than one minute. The presence server aggregates the various presence states and in turn notifies individuals of the status of their subscriptions based on a “light” conversation between the presence server and a presence client executing on a processing device operated by each user.
The number of updates that a presence server may be required to make in real time requires that the presence server balance scalability and performance. For example, a workplace presence server may exploit a centralized messaging queue for chat, presence and notification messages, such as may be based upon a Session Initiation Protocol (SIP) activity on the system. Under this arrangement, each instant message resolves to one SIP message, but each status change resolves to X SIP messages where X is the number of users who receive the change message. Each SIP message queue is typically limited by the number of supported threads. As messages are to be sent, they are placed in the queues in a FIFO fashion. However, messages that are not addressed within a prescribed time limit can time out, resulting in those messages not getting delivered. This results in lost messages, inaccurate presence information, etc. Memory restrictions and central processor capabilities limit the ability of the presence server to simply use more threads. Moreover, this above problem may become more difficult where communities of users are connected via gateways which can cause further bottle necks in system processing.